home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / hope / machope.lha / hope / defs.h < prev    next >
C/C++ Source or Header  |  1990-07-09  |  3KB  |  134 lines

  1. #ifndef    DEFS_H
  2. #define    DEFS_H
  3. /*
  4.  * A lazy Hope interpreter
  5.  *
  6.  * Ross Paterson, University of Queensland, 1988,1989.
  7.  *    Now: Department of Computing, Imperial College, London SW7 2AZ, UK.
  8.  *              (rap@doc.ic.ac.uk)
  9.  *
  10.  * For details of the language, see
  11.  * "Hope: an experimental applicative language" by R.M. Burstall, D.B MacQueen
  12.  *    and D.T. Sanella, CSR-62-80, Department of Computer Science,
  13.  *    University of Edinburgh.  (describes an early version of the language)
  14.  * "Functional Programming", A.J. Field and P.G. Harrison, Addison Wesley,
  15.  *    Wokingham, England, 1988.
  16.  * "A Hope Tutorial" by R. Bailey, Byte, August 1985 pp235-258.
  17.  *
  18.  * Non-standard features of this implementation:
  19.  * - all constructors and defined functions are lazy
  20.  * - ',' is an irrefutable constructor
  21.  * - provision for I/O: input, read, write
  22.  * - module structure: private, abstype
  23.  * - sections (a la Miranda): (op), (op x), (x op)
  24.  *
  25.  * Notice:
  26.  * This program is freely available, subject to the following conditions:
  27.  *  (1) This comment is left intact, and
  28.  *  (2) any changes are marked clearly, and signed, both in the code
  29.  *    where they occur and in the Revision History below.
  30.  *
  31.  * This program was developed under an educational (i.e. cheap) Unix licence.
  32.  * Sale of the program would infringe the conditions of that licence.
  33.  *
  34.  *                Ross Paterson, 11 March 1989.
  35.  */
  36.  
  37. /*
  38.  * Revision History:
  39.  *   31 Jul 88    initial version used in CS225 [Ross]
  40.  *   31 Jan 89    added type, abstype, private, parameterless definitions [Ross]
  41.  *    4 Mar 89    added operator sections [Ross]
  42.  *   16 Jul 89    general clean-up; use of "Standard" module [Ross]
  43.  *   25 Jul 89    #ifdef AMIGA sections [Bill Segall, Ross]
  44.  *    6 Nov 89    back end rewritten to use lazy Krivine machine;
  45.  *        output & comparison functions in "Standard";
  46.  *        simplification of pattern compilation.  [Ross, Andrew Moran]
  47.  *   11 Mar 90    edit command, and re-editing (RE_EDIT) [Ross]
  48.  */
  49.  
  50. #ifndef    unix
  51. #    ifndef    AMIGA
  52. #        define    macintosh
  53. #    endif    AMIGA
  54. #endif    unix
  55.  
  56. /* size of space for compiled code, tables, stack and heap */
  57. #ifdef    macintosh
  58. #    define    MEMSIZE    200000L
  59. #endif    macintosh
  60. #ifdef    AMIGA
  61. #    define    MEMSIZE    200000L
  62. #endif    AMIGA
  63. #ifdef    unix
  64. #    define    MEMSIZE    500000L
  65. #endif    unix
  66.  
  67. #ifdef    macintosh
  68. #    define    RAW_INPUT
  69. #endif    macintosh
  70.  
  71. /*
  72.  * Standard Definitions
  73.  */
  74.  
  75. #include <stdio.h>
  76.  
  77. #ifdef    EBUG
  78. #    define    local
  79. #    define    reg
  80. #else
  81. #    define    local    static
  82. #    define    reg    register
  83. #endif    EBUG
  84. #define    global
  85.  
  86. #define    natural    unsigned
  87. #define    bool    int
  88. #define    sbool    char
  89. #define    TRUE    1
  90. #define    FALSE    0
  91.  
  92. #define    when    break; case
  93. #define    or    : case
  94. #define    otherwise    break; default
  95.  
  96. #ifdef    RAW_INPUT
  97. #    define    gets(s)    _gets(s)
  98. #endif    RAW_INPUT
  99.  
  100. #ifndef    unix
  101. #    define    isatty(fd)    (fd <= 2)
  102. #endif    unix
  103.  
  104. #ifdef    AMIGA
  105. #    define    HOPELIB    "HopeLib"
  106. #endif    AMIGA
  107.  
  108. extern    char    *strcpy(), *gets(), *mktemp();
  109. #ifndef    AMIGA
  110. extern    char    *sprintf();
  111. #else
  112. extern    int    sprintf();
  113. #endif    AMIGA
  114.  
  115. #ifdef    unix
  116. #    define    RE_EDIT
  117. #else
  118. #    define    edit_script(name)
  119. #endif    unix
  120.  
  121. #include <setjmp.h>
  122.  
  123. #ifdef    EBUG
  124. #    define    ASSERT(x)    if (! (x)) fprintf(stderr, "assertion failed: file %s, line %d\n", __FILE__, __LINE__), abort()
  125. #    define    NOTREACHED    fprintf(stderr, "'unreachable statement' reached: file %s, line %d\n", __FILE__, __LINE__), abort()
  126. #else
  127. #    define    ASSERT(x)
  128. #    define    NOTREACHED
  129. #endif    EBUG
  130.  
  131. #define    SIZE(array)    (sizeof(array)/sizeof(array[0]))
  132.  
  133. #endif    DEFS_H
  134.